/**
 * 
 */
package com.cplsystems.incidencias.vm.personal;

import java.io.Serializable;
import java.util.Map;

import org.zkoss.bind.Property;
import org.zkoss.bind.ValidationContext;
import org.zkoss.bind.validator.AbstractValidator;
import org.zkoss.zk.ui.util.Clients;

import com.cplsystems.incidencias.app.utils.IncidenciasUtils;
import com.cplsystems.incidencias.business.DatosGenerales;
import com.cplsystems.incidencias.business.DatosOrganizacionales;
import com.cplsystems.incidencias.business.DatosPersonales;
import com.cplsystems.incidencias.business.Domicilio;

/**
 * @author César Palalía López (csr.plz@aisa-automation.com)
 * 
 */
public class PersonalValidator extends AbstractValidator implements
		Serializable {

	private static final long serialVersionUID = -5829943022639349444L;
	private Map<String, Property> beanProps;

	public void validate(ValidationContext ctx) {
		beanProps = ctx.getProperties(ctx.getProperty().getBase());

		validarDatosGenerales(ctx);
	}

	private void validarDatosGenerales(ValidationContext ctx) {
		PersonalVM personalVM = (PersonalVM) beanProps.get(".").getBase();
		if (personalVM != null) {
			if (!validarDatosGenerales(personalVM)) {
				IncidenciasUtils.showMessage(
						"Asegurese de que los campos marcados con * "
								+ "en la sección de Datos Generales "
								+ "contengan la información correcta",
						Clients.NOTIFICATION_TYPE_WARNING, 0);
				this.addInvalidMessage(ctx, "");
				return;
			}
			if (!validarDatosPersonales(personalVM)) {
				IncidenciasUtils.showMessage(
						"Asegurese de que los campos marcados con * "
								+ "en la sección de Datos Personales "
								+ "contengan la información correcta",
						Clients.NOTIFICATION_TYPE_WARNING, 0);
				this.addInvalidMessage(ctx, "");
				return;
			}
			if (!validarDatosOrganizacionales(personalVM)) {
				IncidenciasUtils.showMessage(
						"Asegurese de que los campos marcados con * "
								+ "en la sección de Datos Organizacionales "
								+ "sean correctos",
						Clients.NOTIFICATION_TYPE_WARNING, 0);
				this.addInvalidMessage(ctx, "");
				return;
			}
		}
	}

	private boolean validarDatosGenerales(PersonalVM personalVM) {
		if (personalVM != null) {
			DatosGenerales datosGenerales = personalVM.getDatosGenerales();
			if (datosGenerales != null) {
				if (datosGenerales.getNombre() == null
						|| datosGenerales.getNombre().isEmpty()
						|| datosGenerales.getApellidoPaterno() == null
						|| datosGenerales.getApellidoPaterno().isEmpty()
						|| datosGenerales.getApellidoMaterno() == null
						|| datosGenerales.getApellidoMaterno().isEmpty()
						|| datosGenerales.getTelefono() == null
						|| datosGenerales.getTelefono().isEmpty()
						|| datosGenerales.getRfc() == null
						|| datosGenerales.getRfc().isEmpty()
						|| datosGenerales.getCurp() == null
						|| datosGenerales.getCurp().isEmpty()) {
					return false;
				}

			}
			Domicilio domicilio = personalVM.getDomicilio();
			if (domicilio != null) {
				if (domicilio.getCalle() == null
						|| domicilio.getCalle().isEmpty()/*
														 * || domicilio.
														 * getNumeroExterior()
														 * == null || domicilio.
														 * getNumeroExterior
														 * ().isEmpty() ||
														 * domicilio.getCiudad()
														 * == null ||
														 * domicilio.getCiudad
														 * ().isEmpty() ||
														 * domicilio
														 * .getColonia() == null
														 * ||
														 * domicilio.getColonia
														 * ().isEmpty()
														 */) {
					return false;
				}
			}

		}
		return true;
	}

	private boolean validarDatosPersonales(PersonalVM personalVM) {
		if (personalVM != null) {
			DatosPersonales datosPersonales = personalVM.getDatosPersonales();
			if (datosPersonales != null) {
				if (datosPersonales.getNombrePadre() == null
						|| datosPersonales.getNombrePadre().isEmpty()
						|| datosPersonales.getNombreMadre() == null
						|| datosPersonales.getNombreMadre().isEmpty()
						|| datosPersonales.getTelefonoUrgencia() == null
						|| datosPersonales.getTelefonoUrgencia().isEmpty()) {
					return false;
				}
			}
		}
		return true;
	}

	private boolean validarDatosOrganizacionales(PersonalVM personalVM) {
		if (personalVM != null) {
			DatosOrganizacionales datosOrganizacionales = personalVM
					.getDatosOrganizacionales();
			if (datosOrganizacionales != null) {
				if (datosOrganizacionales.getCuenta() == null
						|| datosOrganizacionales.getCuenta().isEmpty()
						|| datosOrganizacionales.getClabe() == null
						|| datosOrganizacionales.getClabe().isEmpty()
						|| datosOrganizacionales.getNumeroAfiliacionIMSS() == null
						|| datosOrganizacionales.getNumeroAfiliacionIMSS()
								.isEmpty()
						|| datosOrganizacionales.getPercepcionMensual() == null
						|| datosOrganizacionales.getPercepcionMensual() <= 0
						|| datosOrganizacionales.getTotalHoras() == null
						|| datosOrganizacionales.getTotalHoras() <= 0) {
					return false;
				}
			}
		}
		return true;
	}

}
